\chapter{Desenvolvimento}

Neste Capítulo apresentaremos uma descrição da avaliação dos recursos no uso do OpenCV e Android como: (I) a instalação e configuração do software para a implementação dos exemplos aplicado aos dispositivos móveis, (II) três aplicações que serão avaliados usando as técnicas e métodos da Visão Computacional e (III) geração do pacote pkg para instalação e teste nos dispositivos móveis.

\section{Ambiente de desenvolvimento}

Após o processo de revisão da literatura e a utilização do processo de desenvolvimento, houve a intregaração através de ferramentas Eclipse, Android SDK,  Plugin ADT e Open-CV. Na revisão da literatura procurou-se levantar e analisar a experiência na implementação da aplicação, padrões tecnológicos, estratégias, plataformas e interoperabilidade utilizadas para a solução de problemas, onde a mobilidade foi fator essencial.
	
O sistema operacional utilizado para o desenvolvimento deste trabalho foi Windows Seven Ultimate, com a seguinte configuração: Processador Sempron 2600 com 1,5 Gb de memória. O software instalado para o desenvolvimento e implementação foi Eclipse Version: Indigo \footnote[5]{Site para downloads do software Eclipse: http://www.eclipse.org/downloads} Service Release 2 Build id: 20120216-1857. Este foi escolhido por ser usado na maioria dos trabalhos pesquisados para a realização deste trabalho.

Foi utilizado como maquina virtual Java JDK \footnote[6]{Site para downloads do software Java JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html} versão 6.25, com isso temos a instalação JVM (Java Virtual Machine). Como passo seguinte foi à instalação do Android SDK \footnote[7]{Site para downloads do software Android SDK: http://developer.android.com/sdk/index.html} revision 18, componente essencial para o desenvolvimento das aplicações para dispositivos móveis usando Android. 

Para a junção do Eclipse com Android utilizamos o Plugin ADT 18.0.0 \footnote[8]{Site para downloads do Plugin ADT: https://dl-ssl.google.com/android/eclipse}. Para a finalização das instalações e configurações, utilizamos OpenCV  \footnote[9]{Site para downloads do OpenCV 2.3.0 para Android: http://opencv.willowgarage.com/wiki/Android2.3.0} 2.3.0 para Android. A partir do Eclipse então,  importamos os projetos já existentes no pacote OpenCV para o Workspace do Eclipse.

Com os softwares instalados e configurados, realizamos os testes com os projetos existente do OpenCV utilizando dispositivos móveis com o Android. Selecionamos três projetos para avaliação dos recursos: (I) Face Detection, (II) Edge Detection e (III) Puzzle 15. Os motivos para a seleção destes três projetos foram feitos por serem visualmente aplicáveis ricos em recursos e por terem um vasto campo para pesquisa.


\section{Avaliação dos Recursos OpenCV} 

\subsection{Face Detection}

O Sistema de Reconhecimento de Faces (SRF) é utilizado para detectar a presença da face em uma determinada imagem. Ao detectarmos a face é possível detectar as características de cada face, sendo que os algoritmos se baseiam na procura por tais elementos em toda a imagem. Para detectar a face temos a vantagem, de que após esta fase a procura pelas características fica limitada apenas em uma região da imagem. Qualquer problema a ser resolvido, com as técnicas de detecção de faces, acaba esbarrando em alguns problemas comuns, apesar de suas diferentes abordagens, \cite{YDN02} com:

\begin{itemize}
\item Pose: imagem tirada da face pode variar conforme a localização da câmera;
\item Expressão Facial: expressões da face podem influenciar diretamente o resultado da captura da face;
\item Presença de Elementos Estruturais: elementos como barba, bigode e óculos, podem modificar as características em respeito ao tamanho, luminosidade, entre outros;
 \item Ocultação: imagens feitas nos ambientes que não sejam controlados as faces podem ficar, parcial ou totalmente sobrepostas, pelos objetos ou até mesmo pelas outras faces.
\end{itemize}
 
 O detector de faces foi proposto inicialmente por Paul Viola e melhorado por Rainer Lienhart,  veja a Figura \ref{Figura 5.1}.

 \begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.30]{figura9.png}}
\caption{Face Detection}
\label{Figura 5.1}
\end{figure}

A classe Cascade Classifier é implementada pelo OpenCV no para o projeto Face Detection. Esta classe é usada para detectar objetos em um fluxo de vídeo. Para procurar o objeto em toda a imagem move-se a janela de busca em toda a imagem e verifica-se cada local usando o classificador. O classificador é concebido de modo que possa ser facilmente "redimensionadas", sendo capaz de localizar os objetos de interesse e em tamanhos diferentes.

A palavra "cascade" no nome do Cascade Classifier significa que o resultado da classificação, consiste de várias fases mais simples aplicadas em uma região de interesse até que se chegue ao resultado final de classificação. Cada estágio da Cascade Classifier é complexo, sendo eles construídos de classificadores básicos usando um dos quatro diferentes técnicas. Os classificadores básicos são árvore de decisão, o algoritmo atual usa as seguintes características veja Figura \ref{Figura 5.2}

\begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.60]{cascade.png}}
\caption{Fases de classificação de uma região de interesse}
\label{Figura 5.2}
\end{figure}

O recurso usado em um classificador é especificado pela sua forma (1a, 2b,..., 3b), e a posição dentro da região de interesse é a escala, esta não é a mesma que a escala usada na fase de detecção, no entanto estas duas escalas são multiplicados, sendo a resposta calculada como a diferença entre a soma dos pixels da imagem e do retângulo cobrindo toda a funcionalidade. A soma dos pixels da imagem sob a listra preta é multiplicada por três, a fim de compensar as diferenças no tamanho das áreas. As somas de valores de pixels sobre uma regiões retangulares são calculados rapidamente usando imagens integrais. \footnote[10] {http://opencv.itseez.com/modules/objdetect/doc/cascade_classification.html}

Nesta aplicação de detecção de face no Sistema Operacional Android foi de grande validade para o conhecimento e do poder da aplicação para a captura da expressão facial em tempo real, utilizando pré-processamento de imagem, segmentação, identificação do objeto e o reconhecimento de padrão. Conclui-se que apesar de diferentes abordagens, temos alguns problemas comuns, porém foi possível a detecção de face no Android.


\subsection{Edge Detection}

Uma borda em uma imagem é caracterizada por uma mudança, no nível de intensidade dos pixels. Os detectores de borda são definidos para encontrar este tipo de variação nos pixels e quando estes pixels estão próximos eles podem ser conectados formando uma borda ou um contorno e assim definindo uma região ou objeto. Variações nos níveis de intensidade dos pixels podem ser determinadas pelas derivadas primeira e/ou derivada segunda. Alguns métodos de determinação de borda utilizam estas técnicas. O processo consiste em se definir máscaras que caracterizem estas variações e em seguida fazer a operação matemática da imagem pelas máscaras. \footnote[12]{http://opencv.itseez.com/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html}

A detecção de borda desenvolvida por Canny \cite{CANNY86}, embora seja uma técnica mais complexa, também é a de melhor desempenho entre as técnicas tradicionais na área como apresentado na Figura \ref{Figura 5.3}. O detector de bordas de Canny possui três objetivos básicos: 

\begin{itemize}
\item Baixa taxa de erro onde todas as bordas devem ser encontradas; 
\item Pontos da borda deve ser bem localizado onde as bordas localizadas devem ser próximas das bordas reais e;
\item Resposta única para os pontos de uma borda onde o operador deve retornar apenas um ponto para cada ponto sobre a borda.
\end{itemize}
\begin{figure}[h]
\begin{center}
$ \begin{array}{cc}
\includegraphics[scale=0.60]{figura6.png} &
\includegraphics[scale=0.60]{figura7.png} \\
(a) & (b)
\end{array} $
\caption{Edge Detection, (a) Imagem Original, (b) Imagem com Detecção de Bordas}
\label{Figura 5.3}
\end{center} 
\end{figure}

Na avaliação desta aplicação pode-se observar a utilização de pré-processamento de imagem e na segmentação da imagem em tempo real, sendo utilizado o algoritmo de Canny por ter baixa taxa de erro, melhor localização dos pontos de borda e resposta única para os pontos no ambiente do Sistema Operacional Android.



\subsection{Puzzle 15 }

Esta é uma aplicação que usa a biblioteca OpenCV, criando um quebra cabeça com a imagem em tempo real. Utilizando o processamento da imagem temos a divisão em várias partes da captura da imagem pela câmera. Na sequencia o embaralhamento da imagem e por fim a montagem da imagem corretamente. A partir do método createPuzzle cria-se a matriz e posteriormente o embaralhamento da imagem em 15 partes. A Figura \ref{Figura 5.4} ilustra o método createPuzzle: 

\begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.60]{createPluzze.png}}
\caption{Método create Puzzle}
\label{Figura 5.4}
\end{figure}

Depois de criado as colunas e linhas, deve-se ajustar a imagem para que fique perfeita na tela. A Figura \ref{Figura 5.5} mostra detalhes do jogo. Na avaliação desta aplicação foi observado o pré-processamento de imagem e a segmentação em tempo real, podendo ver o funcionamento da aplicação no sistema operacional Android.

\begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.55]{figura10.png}}
\caption{Puzzle 15 peças}
\label{Figura 5.5}
\end{figure}



\section{Geração do Pacote .pkg}

Para podermos realizar os testes das implantações foi necessário a geração do arquivo .pkg que possibilitará a instalação direta do sistema operacional Android. Abrindo o Eclipse e após a organização e ajuste do código usamos a função exportar, "Export Android Application". Neste procedimento tivemos que criar uma \textit{Keystore} \footnote{Keystore : s.f. Chave privada que permite a certificação digital}. O próprio Eclipse solicita os dados necessários para a criação da Keystore, passo a passo. Keystore servirá para qualquer outra criação de arquivo .pkg, lembrando que sempre será solicitado uma senha da Keystore cadastrada no inicio da criação da Keystore.

Após a geração, fizemos a transferência para o dispositivo móvel do arquivo .pkg, no dispositivo móvel localizamos o arquivo .pkg. Ele irá funcionar como um arquivo .exe. Feita a instalação realizamos os testes. Nesta etapa não tivemos nenhum erro durante a operação. É possível encontrar vários tutoriais, trabalhos e artigos para a geração e implementação dos códigos utilizados para os testes. Procuramos mostrar o quão vasto é o campo para desenvolvimento nesta área e que a possibilidade para o desenvolvimento estão em diversas áreas a serem trabalhadas. 

\section{Proposta}

Iremos realizar o estudo e implementação da técnica Template Matching \cite{KAWV12} usando OpenCV e Android, no processo de contagem automática de colônias em placas de Petri, no exame de urocultura. A urocultura é um exame importante para a detecção do nível de infecção urinária em seres humanos. O nível da infecção é determinado pela contagem de colônias na placa de Petri. As colônias aparecem em grandes quantidades e geralmente aglomeradas, portanto, um procedimento de contagem automática é uma tarefa difícil.\cite{PSOA12} A Figura \ref{Figura 5.6} ilustra as colônias bacterianas após o período de cultivo. Em muitos casos as colônias se encontram em grande quantidade e aglomeradas, dificultando a contagem realizada pelo especialista, podendo causar imprecisão nos resultados.

\begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.55]{placaspetri.png}}
\caption{Placas de Petri após período de cultivo}
\label{Figura 5.6}
\end{figure}

Será estudada a técnica Template Matching usando OpenCV e Android, para a  implantação de uma versão para \textit {Mobile} do projeto já em andamento, utilizando todo o conhecimento já aprendido neste trabalho, iremos implementar a técnica Template Matching para realizar a contagem automática de colônias de bactérias em placas de Petri, a partir de um dispositivo com Android, apresentando a avaliação de desempenho da técnica para detecção das colônias de bactérias em diferentes aspectos na imagem. A figura \ref{Figura 5.7} mostra o resultado a ser obtido \cite{PSOA12}:

\begin{figure}[h]
\centering
\fbox{\includegraphics[scale=0.55]{resultado.png}}
\caption{À esquerda a imagem da placa de Petri e a esquerda o resultado da aplicação da técnica Template Matching}
\label{Figura 5.7}
\end{figure}
